package edu.corn.job.core.processor;

import java.util.Optional;

/**
 * 实现该接口的Job具有能被定时执行的功能。
 * 1. 有间隔时间的定时任务，在delay后执行。
 * 2. 有delay没有间隔时间的任务，在delay后执行一次。
 * 3. 有cron表达式的任务，按照cron表达式进行线程池投递。
 * 4. 上述任务还会有count，执行次数，到0时停止。默认是无穷大。
 */
public interface ScheduleJobProcessor {

    /**
     * 获取间隔时长。默认为秒。
     *
     * @return 间隔时长。
     */
    Optional<Long> getInterval();

    void setInterval(Long duration);

    /**
     * 可能存在的cron表达式
     *
     * @return cron表达式。
     */
    Optional<String> getCronExpression();

    void setCronExpression(String cronExpression);


    /**
     * 延迟执行。默认立即执行。
     *
     * @return
     */
    Optional<Long> getDelay();

    void setDelay(Long delay);

    /**
     * 执行次数。默认无穷大。
     *
     * @return
     */
    Optional<Long> getCount();


    void setCount(Long count);
}
